package homeWork;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.TreeSet;
// 要求
        /*
            1. 将数据封装至 Hero 对象, 多个 Hero 对象放入 List 集合
            2. 将集合中的数据按寿命高低排序（即death-birth）, 找到寿命最高的武将
            3. 按集合中数据按武力值排序, 找到武力最高的武将
            4. 找到男性武力最低的武将
            5. 找到女性武力最高的武将
            6. 找到武力最高的前10名武将
     */

public class MyHero {
    public static void main(String[] args) {
        String data = "1\t阿会喃\t云南\t男\t190\t225\t74\n" +
                "2\t伊籍\t江陵\t男\t162\t226\t24\n" +
                "3\t尹赏\t天水\t男\t194\t260\t44\n" +
                "4\t尹默\t梓潼\t男\t183\t239\t15\n" +
                "5\t于禁\t陈留\t男\t159\t221\t78\n" +
                "6\t卫瓘\t晋阳\t男\t220\t291\t46\n" +
                "7\t袁胤\t汝南\t男\t163\t199\t14\n" +
                "8\t袁熙\t汝南\t男\t176\t207\t51\n" +
                "9\t阎行\t长安\t男\t159\t222\t84\n" +
                "10\t阎柔\t北平\t男\t168\t227\t57\n" +
                "11\t袁术\t宛\t男\t155\t199\t65\n" +
                "12\t袁尚\t汝南\t男\t179\t207\t75\n" +
                "13\t袁绍\t南皮\t男\t154\t202\t69\n" +
                "14\t阎象\t宛\t男\t158\t199\t27\n" +
                "15\t袁谭\t汝南\t男\t173\t205\t69\n" +
                "16\t阎圃\t汉中\t男\t163\t231\t25\n" +
                "17\t王威\t襄阳\t男\t163\t208\t70\n" +
                "18\t王允\t洛阳\t男\t137\t192\t6\n" +
                "19\t王伉\t成都\t男\t184\t254\t60\n" +
                "20\t王粲\t邺\t男\t177\t217\t3\n" +
                "21\t王修\t北海\t男\t168\t218\t27\n" +
                "22\t王肃\t下邳\t男\t195\t256\t22\n" +
                "23\t邹氏\t天水\t女\t165\t197\t6\n" +
                "24\t曹节\t\t女\t190\t260\t2\n" +
                "25\t孙氏\t建业\t女\t188\t250\t22\n" +
                "26\t孙尚香\t江陵\t女\t193\t222\t86\n" +
                "27\t孙鲁育\t\t女\t204\t250\t8\n" +
                "28\t孙鲁班\t建业\t女\t202\t250\t58\n" +
                "29\t大乔\t建业\t女\t177\t210\t11\n" +
                "30\t张氏\t\t女\t207\t237\t61\n" +
                "31\t张春华\t陈留\t女\t189\t234\t49\n" +
                "32\t貂蝉\t洛阳\t女\t176\t198\t26\n" +
                "33\t樊氏\t桂阳\t女\t176\t215\t22\n" +
                "34\t糜氏\t下邳\t女\t176\t208\t6\n" +
                "35\t卞氏\t许昌\t女\t160\t230\t24\n" +
                "36\t步练师\t\t女\t185\t238\t10\n" +
                "37\t刘氏\t洛阳\t女\t164\t205\t8\n";
        //1.封装数据
        //创建集合录入对象
        List<Hero> list = new ArrayList<>();
        //分割字符串形成一个个对象
        String[] split = data.split("\n");
        //遍历数组
        for (String s : split) {
            String[] heroArr = s.split("\t");

            int id = Integer.parseInt(heroArr[0]);
            String name = heroArr[1];
            String location = heroArr[2];
            String sex = heroArr[3];
            int birth = Integer.parseInt(heroArr[4]);
            int death = Integer.parseInt(heroArr[5]);
            int strength = Integer.parseInt(heroArr[6]);
            //创建Hero对象
            Hero hero = new Hero(id, name, location, sex, birth, death, strength);
            //添加到集合
            list.add(hero);
        }

        //2.找出寿命最高的武将
        //创建新的集合添加元素
        TreeSet<Hero> set = new TreeSet<>(
                //定义比较器
                (Hero o1, Hero o2) -> {
                    int age2 = o2.getDeath() - o2.getBirth();
                    int age1 = o1.getDeath() - o1.getBirth();
                    return age2 - age1;
                }
        );
        //添加集合
        set.addAll(list);
        //调用方法
        System.out.println("找出寿命最高的武将:");
        getCollection(set);
        System.out.println("=======================");

        //3.按集合中数据按武力值排序, 找到武力最高的武将
        //创建TreeSet集合
        TreeSet<Hero> set2 = new TreeSet<>(
                //定义比较器
                (o1, o2) -> {
                    return o2.getStrength() - o1.getStrength();
                }
        );
        //添加集合
        set2.addAll(list);
        //调用方法
        System.out.println("找到武力最高的武将:");
        getCollection(set2);
        System.out.println("=================");

        //4.找到男性武力最低的武将
        //创建TreeSet集合
        TreeSet<Hero> set3 = new TreeSet<>(
                //定义比较器
                (o1, o2) -> o1.getStrength() - o2.getStrength()
        );
        //遍历list集合,提取男性武将
        for (Hero hero : list) {
            if ("男".equals(hero.getSex())) {
                set3.add(hero);
            }
        }
        //调用方法遍历集合
        System.out.println("找到男性武力最低的武将:");
        getCollection(set3);
        System.out.println("=================");

        //5.找到女性武力最高的武将
        //创建TreeSet集合
        TreeSet<Hero> set4 = new TreeSet<>((o1, o2) -> o2.getStrength() - o1.getStrength());
        //遍历list集合,添加符合条件的对象
        for (Hero hero : list) {
            if ("女".equals(hero.getSex())) {
                set4.add(hero);
            }
        }
        //调用方法遍历集合
        System.out.println("找到女性武力最高的武将:");
        getCollection(set4);
        System.out.println("=================");

        //6.找到武力最高的前10名武将
     /*   //创建TreeSet集合
        TreeSet<Hero> set5 = new TreeSet<>((o1, o2) -> o2.getStrength() - o1.getStrength());
        //添加满足要求list集合
        set5.addAll(list);
        //遍历集合输出满足要求的对象
        System.out.println("找到武力最高的前10名武将:");
        for (int i = 0; i < 10; i++) {
            System.out.println(set5[i]);// 错误
        }
*/
     //遍历set2集合
        System.out.println("找到武力最高的前10名武将:");
        //定义个数
        int count=0;
        for (Hero hero : set2) {
            if(count>9){
                break;
            }
            count++;
            System.out.println(hero);
        }
    }

    //创建方法遍历集合
    public static void getCollection(Collection<Hero> collection) {
        for (Hero hero : collection) {
            System.out.println(hero);
        }

    }
}
